﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace Dziennik_ProfilNauczyciela {
    public partial class Form_WidokNauczyciela : Form {
        class Odbiorca {
            public int rodzaj;
            public string nazwa;
            public int userId;
            public Odbiorca(int rodzaj, string nazwa, int userId) {
                this.rodzaj = rodzaj;
                this.nazwa = nazwa;
                this.userId = userId;
            }
        }
        class Odbiorca_Uczen : Odbiorca {
            public string klasa;
            public Odbiorca_Uczen(int rodzaj, string nazwa, int userId, string klasa) : base(rodzaj, nazwa, userId){
                this.klasa = klasa;
            }
        }
        class TreeNode_Odbiorca : TreeNode {
            public int userId;
        }

        void OdswiezDrzewoOdbiorcow() {
            List<Odbiorca_Uczen> listaUczniow = new List<Odbiorca_Uczen>();
            List<Odbiorca> listaNauczycieli = new List<Odbiorca>();
            List<Odbiorca> listaOpiekunow = new List<Odbiorca>();

            SqlCommand c = new SqlCommand();
            SqlDataReader r;
            c.Connection = SQLInterface.conn;

            c.CommandText = "select concat(u.nazwisko, \' \', u.imie) as nazwa, concat(floor(((k.semestr + 1) / 2)), k.nazwa) as klasa, u.userId from dziennik.dbo.uczniowie u inner join dziennik.dbo.klasy k on u.idKlasy = k.id order by klasa, nazwa asc";
            r = c.ExecuteReader();
            while (r.Read()) {
                listaUczniow.Add(new Odbiorca_Uczen(1, r.GetString(0), r.GetInt32(2), r.GetString(1)));
            }
            r.Close();

            c.CommandText = "select concat(nazwisko, \' \', imie, \', \', tytulNaukowy) as nazwa, userId from dziennik.dbo.nauczyciele order by nazwa asc";
            r = c.ExecuteReader();
            while (r.Read()) {
                listaNauczycieli.Add(new Odbiorca(2, r.GetString(0), r.GetInt32(1)));
            }
            r.Close();

            c.CommandText = "select concat(nazwisko, \' \', imie) as nazwa, userId from dziennik.dbo.opiekunowie order by nazwa asc";
            r = c.ExecuteReader();
            while (r.Read()) {
                listaOpiekunow.Add(new Odbiorca(0, r.GetString(0), r.GetInt32(1)));
            }
            r.Close();

            for(int i=0;i!=3;i++) treeView_Odbiorcy.Nodes[i].Nodes.Clear();

            List<string> listaKlas = (from u in listaUczniow
                                      select (string)u.klasa)
                                      .Distinct()
                                      .ToList();

            for (int i = 0; i != listaKlas.Count; i++) {//dodawane są klasy
                TreeNode t = new TreeNode(listaKlas[i]);
                t.ImageIndex = 1;
                t.SelectedImageIndex = 1;
                t.StateImageIndex = 1;
                treeView_Odbiorcy.Nodes[2].Nodes.Add(t);
            }

            for (int i = 0; i != listaUczniow.Count; i++) {//uczniowie sa dodawani do klas
                int j;
                for (j = 0; j != treeView_Odbiorcy.Nodes[2].Nodes.Count; j++) {
                    if (treeView_Odbiorcy.Nodes[2].Nodes[j].Text == listaUczniow[i].klasa) {
                        TreeNode_Odbiorca t = new TreeNode_Odbiorca();
                        t.ImageIndex = 1;
                        t.SelectedImageIndex = 1;
                        t.StateImageIndex = 1;
                        t.Text = listaUczniow[i].nazwa;
                        t.userId = listaUczniow[i].userId;
                        treeView_Odbiorcy.Nodes[2].Nodes[j].Nodes.Add(t);
                    }
                }
            }

            for (int i = 0; i != listaNauczycieli.Count; i++) {
                TreeNode_Odbiorca t = new TreeNode_Odbiorca();
                t.ImageIndex = 2;
                t.SelectedImageIndex = 2;
                t.StateImageIndex = 2;
                t.Text = listaNauczycieli[i].nazwa;
                t.userId = listaNauczycieli[i].userId;
                treeView_Odbiorcy.Nodes[0].Nodes.Add(t);
            }

            for (int i = 0; i != listaOpiekunow.Count; i++) {
                TreeNode_Odbiorca t = new TreeNode_Odbiorca();
                t.ImageIndex = 0;
                t.SelectedImageIndex = 0;
                t.StateImageIndex = 0;
                t.Text = listaOpiekunow[i].nazwa;
                t.userId = listaOpiekunow[i].userId;
                treeView_Odbiorcy.Nodes[1].Nodes.Add(t);
            }
        }
    }
}
